<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
  <title>{% block title %}{% endblock %}</title>
  <link rel="icon" href="https://yonghuc-1304749288.cos.ap-beijing.myqcloud.com/blog/icon.ico">

  <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="/rss.html">
  <link rel=search type="application/opensearchdescription+xml" href="/opensearch.xml" title="{{ options.title }}">
  {% if options.keywords %}
  <meta name="keywords" content="{{options.keywords}}">{% endif %}
  {% if options.description %}
  <meta name="description" content="{{options.description}}">{% endif %}
  {%- block headers %}{% endblock -%}
  <script >
    (function(G,k){function z(a){return k.getElementById(a)}function w(){j("stc_nls",1,1)}function C(e,d){var a="";try{(a=H[e]||""),a.length<99&&(j(d,0),(k.documentElement.style.display="none"),I(),(G.onbeforeunload=null),location.reload(!0))}catch(c){I()}return a}function q(c,a){try{(H[c]=a),a!==H[c]&&I()}catch(d){I()}}function y(f){var g=k.cookie.split("; ");for(var d=0,a=g.length,c;d<a;d++){c=g[d].split("=");if(c[0]===f){return c[1]}}return""}function j(d,f,c){(c=c||60),f||(c=-1),(c=new Date(+new Date()+c*86400000).toGMTString());var a=d+"="+f+"; path=/; expires="+c;location.protocol.indexOf("https")>-1&&(a+="; Secure"),(k.cookie=a)}function J(d,a){var c=z(a)&&z(a).innerHTML.trim();q(d,c)}function F(f,d,c){var e=C(f,c);if(G.execScript&&d==="script"){return G.execScript(e)}var a=k.createElement(d);(a.innerHTML=e),k.head.appendChild(a)}function I(){B=!0;var c=/(?:;)?stc_[^=]*=[^;]*;?/g,d=k.cookie.match(c)||[],a=d.length;while(a){--a,j(d[a].split("=")[0],0)}}function D(l,f,m){if(B){return}var h=y(l).split(""),d=!1;for(var g=0,c=h.length;g<c;g+=2){if(h[g]===f){(h[g+1]=m),(d=!0);break}}d||h.push(f,m),j(l,h.join(""))}var B=!1,x=function(){},H,b=0,A=(G.LS={html2ls:x,ls2html:x,updateVersion:x});try{(H=localStorage),(A.html2ls=J),(A.ls2html=F),(A.updateVersion=D)}catch(E){w()}})(this,document);
  </script>
  {% if localStorage === false %}
  <style id="stc_blog_css">
    body {
        margin: 0;
        padding: 0;
        color: #666;
        -webkit-text-size-adjust: none;
        -webkit-transition: -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        transition: -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        transition: transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        transition: transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99),
            -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        -webkit-tap-highlight-color: transparent;
        font-family: 'Helvetica Neue', Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei';
        -webkit-font-smoothing: antialiased;
        -webkit-overflow-scrolling: touch;
        font-size: 14px;
    }
    body,
    html {
        width: 100%;
        height: 100%;
    }
    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
        margin: 0;
        padding: 0;
    }
    a,
    a:hover {
        color: #2479cc;
        text-decoration: none;
    }
    ul,
    ol {
        padding: 0;
    }
    * {
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
    }
    body.side {
        position: fixed;
        -webkit-transform: translate3D(250px, 0, 0);
        -ms-transform: translate3D(250px, 0, 0);
        transform: translate3D(250px, 0, 0);
    }
    #main {
        background-color: #fff;
        padding-left: 310px;
        padding-right: 40px;
        max-width: 1600px;
        -webkit-overflow-scrolling: touch;
    }
    h1.intro {
        padding: 20px 30px;
        background-color: #f6f9fa;
        text-align: center;
        color: #999;
    }
    .iconfont {
        font-size: 16px;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -webkit-text-stroke-width: 0.2px;
        -moz-osx-font-smoothing: grayscale;
    }
    .hljs {
        display: block;
        background: white;
        padding: 0.5em;
        color: #333;
        overflow-x: auto;
        -webkit-text-size-adjust: none;
    }
    .hljs-comment,
    .lang-bash .hljs-shebang,
    .lang-java .hljs-javadoc,
    .lang-javascript .hljs-javadoc,
    .lang-rust .hljs-preprocessor {
        color: #969896;
    }
    .hljs-string,
    .lang-apache .hljs-sqbracket,
    .lang-coffeescript .hljs-subst,
    .lang-coffeescript .hljs-regexp,
    .lang-cpp .hljs-preprocessor,
    .lang-c .hljs-preprocessor,
    .lang-javascript .hljs-regexp,
    .lang-json .hljs-attribute,
    .lang-makefile .hljs-variable,
    .lang-markdown .hljs-value,
    .lang-markdown .hljs-link_label,
    .lang-markdown .hljs-strong,
    .lang-markdown .hljs-emphasis,
    .lang-markdown .hljs-blockquote,
    .lang-nginx .hljs-regexp,
    .lang-nginx .hljs-number,
    .lang-objectivec .hljs-preprocessor .hljs-title,
    .lang-perl .hljs-regexp,
    .lang-php .hljs-regexp,
    .lang-xml .hljs-value,
    .lang-less .hljs-built_in,
    .lang-scss .hljs-built_in {
        color: #df5000;
    }
    .hljs-keyword,
    .lang-css .hljs-at_rule,
    .lang-css .hljs-important,
    .lang-http .hljs-request,
    .lang-ini .hljs-setting,
    .lang-haskell .hljs-type,
    .lang-java .hljs-javadoctag,
    .lang-javascript .hljs-tag,
    .lang-javascript .hljs-javadoctag,
    .lang-nginx .hljs-title,
    .lang-objectivec .hljs-preprocessor,
    .lang-php .hljs-phpdoc,
    .lang-sql .hljs-built_in,
    .lang-less .hljs-tag,
    .lang-less .hljs-at_rule,
    .lang-scss .hljs-tag,
    .lang-scss .hljs-at_rule,
    .lang-scss .hljs-important,
    .lang-stylus .hljs-at_rule,
    .lang-go .hljs-typename,
    .lang-swift .hljs-preprocessor {
        color: #a71d5d;
    }
    .lang-apache .hljs-common,
    .lang-apache .hljs-cbracket,
    .lang-apache .hljs-keyword,
    .lang-bash .hljs-literal,
    .lang-bash .hljs-built_in,
    .lang-coffeescript .hljs-literal,
    .lang-coffeescript .hljs-built_in,
    .lang-coffeescript .hljs-number,
    .lang-cpp .hljs-number,
    .lang-cpp .hljs-built_in,
    .lang-c .hljs-number,
    .lang-c .hljs-built_in,
    .lang-cs .hljs-number,
    .lang-cs .hljs-built_in,
    .lang-css .hljs-attribute,
    .lang-css .hljs-hexcolor,
    .lang-css .hljs-number,
    .lang-css .hljs-function,
    .lang-haskell .hljs-number,
    .lang-http .hljs-literal,
    .lang-http .hljs-attribute,
    .lang-java .hljs-number,
    .lang-javascript .hljs-built_in,
    .lang-javascript .hljs-literal,
    .lang-javascript .hljs-number,
    .lang-json .hljs-number,
    .lang-makefile .hljs-keyword,
    .lang-markdown .hljs-link_reference,
    .lang-nginx .hljs-built_in,
    .lang-objectivec .hljs-literal,
    .lang-objectivec .hljs-number,
    .lang-objectivec .hljs-built_in,
    .lang-php .hljs-literal,
    .lang-php .hljs-number,
    .lang-python .hljs-number,
    .lang-ruby .hljs-prompt,
    .lang-ruby .hljs-constant,
    .lang-ruby .hljs-number,
    .lang-ruby .hljs-subst .hljs-keyword,
    .lang-ruby .hljs-symbol,
    .lang-rust .hljs-number,
    .lang-sql .hljs-number,
    .lang-puppet .hljs-function,
    .lang-less .hljs-number,
    .lang-less .hljs-hexcolor,
    .lang-less .hljs-function,
    .lang-less .hljs-attribute,
    .lang-scss .hljs-preprocessor,
    .lang-scss .hljs-number,
    .lang-scss .hljs-hexcolor,
    .lang-scss .hljs-function,
    .lang-scss .hljs-attribute,
    .lang-stylus .hljs-number,
    .lang-stylus .hljs-hexcolor,
    .lang-stylus .hljs-attribute,
    .lang-stylus .hljs-params,
    .lang-go .hljs-built_in,
    .lang-go .hljs-constant,
    .lang-swift .hljs-built_in,
    .lang-swift .hljs-number {
        color: #0086b3;
    }
    .lang-apache .hljs-tag,
    .lang-cs .hljs-xmlDocTag,
    .lang-css .hljs-tag,
    .lang-xml .hljs-title,
    .lang-stylus .hljs-tag {
        color: #63a35c;
    }
    .lang-bash .hljs-variable,
    .lang-cs .hljs-preprocessor,
    .lang-cs .hljs-preprocessor .hljs-keyword,
    .lang-css .hljs-attr_selector,
    .lang-css .hljs-value,
    .lang-ini .hljs-value,
    .lang-ini .hljs-keyword,
    .lang-javascript .hljs-tag .hljs-title,
    .lang-makefile .hljs-constant,
    .lang-nginx .hljs-variable,
    .lang-xml .hljs-tag,
    .lang-scss .hljs-variable {
        color: #333;
    }
    .lang-bash .hljs-title,
    .lang-coffeescript .hljs-title,
    .lang-cpp .hljs-title,
    .lang-c .hljs-title,
    .lang-cs .hljs-title,
    .lang-css .hljs-id,
    .lang-css .hljs-class,
    .lang-css .hljs-pseudo,
    .lang-ini .hljs-title,
    .lang-haskell .hljs-title,
    .lang-haskell .hljs-pragma,
    .lang-java .hljs-title,
    .lang-javascript .hljs-title,
    .lang-makefile .hljs-title,
    .lang-objectivec .hljs-title,
    .lang-perl .hljs-sub,
    .lang-php .hljs-title,
    .lang-python .hljs-decorator,
    .lang-python .hljs-title,
    .lang-ruby .hljs-parent,
    .lang-ruby .hljs-title,
    .lang-rust .hljs-title,
    .lang-xml .hljs-attribute,
    .lang-puppet .hljs-title,
    .lang-less .hljs-id,
    .lang-less .hljs-pseudo,
    .lang-less .hljs-class,
    .lang-scss .hljs-id,
    .lang-scss .hljs-pseudo,
    .lang-scss .hljs-class,
    .lang-stylus .hljs-class,
    .lang-stylus .hljs-id,
    .lang-stylus .hljs-pseudo,
    .lang-stylus .hljs-title,
    .lang-swift .hljs-title,
    .lang-diff .hljs-chunk {
        color: #795da3;
    }
    .lang-coffeescript .hljs-reserved,
    .lang-coffeescript .hljs-attribute {
        color: #1d3e81;
    }
    .lang-diff .hljs-chunk {
        font-weight: bold;
    }
    .lang-diff .hljs-addition {
        color: #55a532;
        background-color: #eaffea;
    }
    .lang-diff .hljs-deletion {
        color: #bd2c00;
        background-color: #ffecec;
    }
    .lang-markdown .hljs-link_url {
        text-decoration: underline;
    }
    #sidebar {
        width: 270px;
        height: 100%;
        position: fixed;
        left: 0;
        top: 0;
        background-color: #202020;
        overflow: auto;
        z-index: 1;
        -webkit-overflow-scrolling: touch;
    }
    #sidebar li,
    #sidebar ul {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    #sidebar .profile {
        padding-top: 40px;
        padding-bottom: 10px;
    }       
    #sidebar .profile a {
        display: block;
        margin: 0 auto;
        width: 200px;
        height: 200px;
        border-radius: 70px;
        overflow: hidden;
        background-size: 100% 100%;
        background-image: url();
    }
    #sidebar .profile span {
        font-weight: 400;
        display: block;
        font-size: 20px;
        color: #fff;
        width: 200px;
        margin: 20px auto 0px;
    }
    #sidebar .profile .subtitle {
        display: block;
        padding: 10px 0;
        color: #fff;
        font-size: 13px;
        width: 200px;
        margin: auto;
    }
    #sidebar .buttons {
        margin: 0 0 20px;
    }
    #sidebar .buttons li {
        display: block;
        width: 200px;
        height: 45px;
        line-height: 45px;
        font-size: 16px;
        margin: 0 auto;
    }
    #sidebar .buttons li a {
        display: block;
        color: #fff;
        -webkit-transition: color 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        transition: color 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        text-decoration: none;
    }
    #sidebar .buttons li a i,
    #sidebar .buttons li a span {
        display: inline-block;
        vertical-align: middle;
    }
    #sidebar .buttons li a i {
        font-size: 20px;
        width: 25px;
        height: 45px;
        line-height: 45px;
        text-align: center;
        margin-right: 20px;
    }
    #sidebar .buttons li a:hover {
        color: rgba(153, 153, 153, 0.8);
    }
    #sidebar .buttons li a.inline {
        display: inline-block;
        width: 40px;
    }
    #sidebar-mask {
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        z-index: 999;
        overflow: hidden;
        display: none;
        background-color: rgba(255, 255, 255, 0);
    }
    #header {
        display: none;
    }
    #header {
        width: 100%;
        height: 50px;
        line-height: 50px;
        overflow: hidden;
        position: fixed;
        left: 0;
        top: 0;
        z-index: 9;
        background-color: #323436;
    }
    body.side #header .btn-bar:before {
        width: 24px;
        -webkit-transform: rotate(-45deg);
        -ms-transform: rotate(-45deg);
        transform: rotate(-45deg);
        top: 25px;
    }
    body.side #header .btn-bar:after {
        width: 24px;
        -webkit-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
        transform: rotate(45deg);
        bottom: 24px;
    }
    body.side #header .btn-bar i {
        opacity: 0;
    }
    #header h1 {
        text-align: center;
        font-size: 16px;
    }
    #header h1 a {
        color: #999;
    }
    #header .btn-bar {
        width: 50px;
        height: 50px;
        position: absolute;
        left: 0;
        top: 0;
    }
    #header .btn-bar i,
    #header .btn-bar:after,
    #header .btn-bar:before {
        width: 22px;
        height: 1px;
        position: absolute;
        left: 14px;
        background-color: #999;
        -webkit-transition: all 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99) 0.3s;
        transition: all 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99) 0.3s;
    }
    #header .btn-bar i {
        top: 25px;
        opacity: 1;
    }
    #header .btn-bar:before {
        content: '';
        top: 17px;
    }
    #header .btn-bar:after {
        content: '';
        bottom: 16px;
    }
        
    #header a.me {
        display: block;
        position: absolute;
        right: 10px;
        top: 10px;
        width: 30px;
        height: 30px;
        border-radius: 30px;
        overflow: hidden;
        background-size: 100% 100%;
        background-image: url();
    }
    .pagination {
        width: 100%;
        line-height: 20px;
        position: relative;
        border-top: 1px solid #fff;
        border-bottom: 1px solid #ddd;
        padding: 20px 0;
        overflow: hidden;
    }
    .pagination .prev {
        float: left;
    }
    .pagination .next {
        float: right;
    }
    .pagination .center {
        text-align: center;
        width: 80px;
        margin: auto;
    }
    article {
        border-bottom: 1px solid #ddd;
        border-top: 1px solid #fff;
        position: relative;
        padding: 30px 0;
        word-wrap: break-word;
    }
    article .meta {
        position: relative;
        float: right;
        color: #555;
        font-size: 0.9em;
        line-height: 2;
        width: auto;
        text-align: right;
    }
    article .meta a {
        color: #999;
    }
    article .meta .date,
    article .meta .comment,
    article .meta .tags {
        position: relative;
    }
    article h1.title {
        color: #333;
        font-size: 2em;
        font-weight: 300;
        line-height: 35px;
        margin-bottom: 25px;
    }
    article h1.title a {
        color: #333;
    }
    article h1.title a:hover {
        color: #2479cc;
        transition: color 0.3s;
    }
    article button,
    article input.runcode {
        line-height: 1;
        border: 0;
        cursor: pointer;
        padding: 0.625em 0.5em;
        box-shadow: inset 0 -5px 20px rgba(0, 0, 0, 0.1);
        background: #12b0e6;
        color: #fff;
        font-size: 14px;
        margin-top: 10px;
        -webkit-appearance: button;
    }
    article input.runcode:hover,
    article input.runcode:focus,
    article input.runcode:active {
        background: #f6ad08;
    }
    article strong {
        font-weight: 700;
    }
    article em {
        font-style: italic;
    }
    article blockquote {
        margin: 10px 0 0 0;
        padding: 15px 20px;
        border-left: 5px solid #2479cc;
        background-color: #f8f8f8;
    }
    article blockquote p {
        margin-bottom: 0;
    }
    article blockquote a {
        word-break: break-all;
        word-wrap: break-word;
    }
    article code {
        font-family: 'Consolas', 'Courier New', Courier, mono, serif;
        font-size: 80%;
        margin: 0 2px;
        padding: 4px 5px;
        background-color: #f2f2f2;
        vertical-align: middle;
        border-radius: 5px;
    }
    article pre {
        font-family: 'Consolas', 'Liberation Mono', Courier, monospace;
        font-size: 14px;
        line-height: 1.6;
        color: #5d6a6a;
        padding: 0.6em;
        border-left: 5px solid #ccc;
        word-break: break-all;
        word-wrap: break-word;
        white-space: pre-wrap;
        position: relative;
        overflow: hidden;
    }
    article pre code {
        border-radius: 0;
        background-color: transparent;
        border: 0;
        padding: 0;
        margin: 0;
        font-size: 100%;
        display: block;
        position: relative;
    }
    article pre b.name {
        position: absolute;
        line-height: 1;
        top: 10px;
        right: 10px;
        font-size: 60px;
        color: #eee;
        pointer-events: none;
    }
    @media screen and (max-width: 768px) {
        article pre b.name {
            font-size: 30px;
        }
    }
    article img {
        padding: 0;
        display: block;
        border: 1px solid #ccc;
        margin: 10px 0 5px 0;
        max-width: 100%;
    }
    article table {
        border: 0;
        border-collapse: collapse;
        border-spacing: 0;
    }
    article table th,
    article table td {
        border: 0;
    }
    article table th {
        border-bottom: 2px solid #848484;
        text-align: left;
        padding: 6px 20px;
    }
    article table td {
        border-bottom: 1px solid #d0d0d0;
        padding: 6px 20px;
    }
    article .expire-tips {
        padding: 5px 10px;
        font-size: 15px;
        border: 1px solid #e2e2e2;
        background-color: #ffffc0;
        border-left: 5px solid #fff000;
        color: #333;
    }
    article .aliyun-tips {
        padding: 5px 10px;
        font-size: 15px;
        border: 1px solid #e2e2e2;
        background-color: #f0f8f4;
        border-left: 5px solid #7cc4a0;
    }
    article .post-info {
        font-size: 14px;
    }
    article .entry-content {
        font-size: 16px;
        line-height: 1.8;
        word-wrap: break-word;
    }
    article .entry-content .date {
        color: #999;
        font-size: 14px;
        font-style: italic;
    }
    article .entry-content p,
    article .entry-content blockquote,
    article .entry-content ul,
    article .entry-content ol,
    article .entry-content dl,
    article .entry-content table,
    article .entry-content iframe,
    article .entry-content h1,
    article .entry-content h2,
    article .entry-content h3,
    article .entry-content h4,
    article .entry-content h5,
    article .entry-content h6,
    article .entry-content p,
    article .entry-content pre {
        margin-top: 15px;
    }
    article .entry-content ul ul,
    article .entry-content ul ol,
    article .entry-content ul dl,
    article .entry-content ol ul,
    article .entry-content ol ol,
    article .entry-content ol dl,
    article .entry-content dl ul,
    article .entry-content dl ol,
    article .entry-content dl dl,
    article .entry-content blockquote > p:first-of-type {
        margin-top: 0;
    }
    article .entry-content ul,
    article .entry-content ol,
    article .entry-content dl {
        margin-left: 25px;
    }
    article.tags section a {
        display: inline-block;
        font-size: 14px;
        padding: 0 15px;
        height: 40px;
        line-height: 40px;
        color: rgba(36, 121, 204, 0.8);
        border: 1px solid rgba(36, 121, 204, 0.8);
        border-radius: 4px;
        margin: 0 15px 10px 0;
        text-decoration: none;
        -webkit-transition: color 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99),
            border 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        transition: color 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99), border 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
    }
    article.tags section a:hover {
        color: #2479cc;
        border-color: #2479cc;
    }
    a.anchor {
        display: block;
        position: relative;
        visibility: hidden;
    }
    article .firekylin-code > ul {
        list-style: decimal;
        background-color: #fff;
        margin: 0;
        margin-left: 40px;
        padding: 0;
    }
    article .firekylin-code li {
        list-style: decimal-leading-zero;
        border-left: 1px solid #ddd;
        padding-left: 2px;
        position: relative;
    }
    article .firekylin-code li.mark {
        background-color: #fffbdd !important;
    }
    article .firekylin-code li:hover {
        background-color: #f3f3f3 !important;
    }
    article .firekylin-code .line-num {
        width: 40px;
        position: absolute;
        left: 0;
        top: 0;
        height: 100%;
        left: -40px;
        cursor: pointer;
    }
    article .firekylin-code li:nth-of-type(even) {
        background-color: #fcfcfc;
        color: inherit;
    }
    article .entry-content pre .firekylin-code {
        background-color: #eee;
    }
    article pre {
        border-left: 0;
        padding: 0;
    }
    article .entry-content pre code {
        font-size: 12px;
        background-color: #fff;
        border: 1px solid #eee;
        padding: 0;
        line-height: 26px;
    }
    .toc {
        float: right;
        border: 1px solid #e2e2e2;
        font-size: 14px;
        margin: 0 0 15px 20px;
        max-width: 260px;
        min-width: 120px;
        padding: 6px;
        background: #fff;
        position: relative;
        z-index: 1000;
    }
    .toc::before {
        content: '文章目录';
        font-weight: bold;
        border-bottom: 1px solid #e2e2e2;
        display: block;
    }
    .toc:empty {
        display: none;
    }
    @media screen and (max-width: 640px) {
        .toc {
            float: none;
        }
    }
    #search .wrapper {
        margin-right: 72px;
    }
    #search form {
        position: relative;
    }
    #search .wrapper input {
        -webkit-appearance: none;
        border: 1px solid #bbb;
        border-radius: 0;
        box-sizing: border-box;
        display: block;
        font-size: 16px;
        height: 40px;
        outline: 0;
        padding: 4px 6px;
        width: 100%;
    }
    #search .submit {
        -webkit-appearance: none;
        background-color: #e7e7e7;
        border: 1px solid #bbb;
        border-left: 0;
        border-radius: 0;
        color: #222;
        display: block;
        font-size: 16px;
        height: 40px;
        outline: 0;
        position: absolute;
        right: 0;
        top: 0;
        width: 72px;
    }
    #searchResult {
        min-height: 350px;
        overflow-x: hidden;
    }
    #searchResult .info {
        color: #676767;
        font-size: 13px;
        padding: 15px 0;
        border-bottom: 1px solid #e9e9e9;
    }
    #searchResult .no-result {
        padding: 5px;
        margin: 15px 0;
        border: 1px solid #fc3;
        background-color: #fff4c2;
        font-size: 13px;
    }
    #searchResult .loading {
        margin-top: 20px;
    }
    #searchResult .hot-words {
        margin-top: 20px;
    }
    #searchResult .hot-words a {
        margin-right: 20px;
    }
    #searchResult .item {
        padding: 0.5em 0 0.3em 0;
    }
    #searchResult .item .title a {
        font-size: 16px;
        text-decoration: underline;
    }
    #searchResult .item .title .type {
        display: inline-block;
        background-color: #eee;
        color: #888;
        margin-right: 8px;
        padding: 0 5px;
        font-size: 13px;
        border-radius: 3px;
    }
    #searchResult .item .desc {
        font-size: 14px;
        line-height: 1.6;
    }
    #searchResult .item .tags {
        font-size: 14px;
        line-height: 1.8;
    }
    #searchResult .item .tags a {
        margin-right: 12px;
        color: #666;
    }
    #searchResult .item .title b,
    #searchResult .item .desc b {
        color: #c00;
        font-weight: normal;
    }
    #footer {
        line-height: 1.8;
        text-align: center;
        padding: 15px;
        border-top: 1px solid #fff;
        font-size: 0.9em;
    }
    #footer .beian {
        color: #666;
    }
    #comments {
        border-top: 1px solid #fff;
        border-bottom: 1px solid #ddd;
        padding: 30px 0;
        min-height: 350px;
    }
    #comments h1.title {
        font-size: 25px;
        font-weight: 300;
        line-height: 35px;
        margin-bottom: 20px;
    }
    @media screen and (max-width: 768px) {
        #header {
            -webkit-transform: translate3D(0, 0, 0);
            -ms-transform: translate3D(0, 0, 0);
            transform: translate3D(0, 0, 0);
            -webkit-transition: all 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
            transition: all 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
            display: block;
        }
        a.anchor {
            top: -50px;
        }
    }
    @media screen and (max-width: 768px) {
        #sidebar.behavior_1 {
            -webkit-transform: translate3D(-270px, 0, 0);
            -ms-transform: translate3D(-270px, 0, 0);
            transform: translate3D(-270px, 0, 0);
        }
        #sidebar.behavior_2 {
            -webkit-transform: translate3D(0, 0, 0);
            -ms-transform: translate3D(0, 0, 0);
            transform: translate3D(0, 0, 0);
        }
        #sidebar {
            -webkit-transition: -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
            transition: -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
            transition: transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
            transition: transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99),
                -webkit-transform 0.2s cubic-bezier(0.4, 0.01, 0.165, 0.99);
        }
        #sidebar .profile {
            padding-top: 20px;
            padding-bottom: 20px;
        }
        #sidebar .profile a,
        #sidebar .profile img {
            width: 100px;
            height: 100px;
            border-radius: 100px;
        }
        #sidebar .profile span {
            display: none;
        }
    }
    @media screen and (min-width: 769px) and (max-width: 1024px) {
        #sidebar {
            width: 75px;
        }
        #sidebar .profile {
            padding-top: 20px;
        }
        #sidebar .profile a,
        #sidebar .profile img {
            width: 40px;
            height: 40px;
            border-radius: 40px;
        }
        #sidebar .profile span {
            display: none;
        }
        #sidebar .buttons li a {
            padding: 0;
        }
        #sidebar .buttons li a.inline {
            width: 100%;
        }
        #sidebar .buttons li a i {
            font-size: 18px;
            display: block;
            margin: 0 auto;
        }
        #sidebar .buttons li a span {
            display: none;
        }
    }
    @media screen and (min-width: 768px) and (max-width: 1024px) {
        #main {
            padding-left: 115px;
        }
    }
    @media screen and (max-width: 769px) {
        #main {
            width: 100%;
            min-height: 100%;
            padding-top: 50px;
            padding-left: 10px;
            padding-right: 10px;
        }
    }
    @media screen and (max-width: 769px) {
        article {
            background-color: #fff;
            padding: 10px;
        }
        article .meta {
            display: none;
        }
        article h1 {
            font-size: 22px;
            padding: 5px 0 10px;
            margin: 0;
        }
        article .desc {
            color: #999;
            font-size: 14px;
        }
        article p.more {
            font-size: 14px;
            margin: 5px 0;
        }
    }
    .entry-content code[class*='language-'],
    .entry-content pre[class*='language-'] {
        color: #423f37;
        background: 0;
        font-family: Menlo-Regular, Menlo, Monaco, Consolas, 'Courier New', monospace;
        font-size: 1em;
        text-align: left;
        white-space: pre;
        word-spacing: normal;
        word-break: normal;
        word-wrap: normal;
        line-height: 1.5rem;
        -moz-tab-size: 4;
        -o-tab-size: 4;
        tab-size: 4;
        -webkit-hyphens: none;
        -moz-hyphens: none;
        -ms-hyphens: none;
        hyphens: none;
    }
    .entry-content pre[class*='language-']::-moz-selection,
    .entry-content pre[class*='language-'] ::-moz-selection,
    .entry-content code[class*='language-']::-moz-selection,
    .entry-content code[class*='language-'] ::-moz-selection {
        text-shadow: none;
        background: #b3d4fc;
    }
    .entry-content pre[class*='language-']::selection,
    .entry-content pre[class*='language-'] ::selection,
    .entry-content code[class*='language-']::selection,
    .entry-content code[class*='language-'] ::selection {
        text-shadow: none;
        background: #b3d4fc;
    }
    @media print {
        .entry-content code[class*='language-'],
        .entry-content pre[class*='language-'] {
            text-shadow: none;
        }
    }
    .-coentryntent pre[class*='language-'] {
        padding: 1em;
        margin: 0.5em 0;
        overflow: auto;
    }
    .entry-content :not(pre) > code[class*='language-'],
    .entry-content pre[class*='language-'] {
        background: #fefef8;
    }
    .entry-content :not(pre) > code[class*='language-'] {
        padding: 0.1em;
        border-radius: 0.3em;
        white-space: normal;
    }
    .entry-content .token.comment,
    .entry-content .token.prolog,
    .entry-content .token.doctype,
    .entry-content .token.cdata {
        color: #878b88;
    }
    .entry-content .token.punctuation {
        color: #999;
    }
    .entry-content .token.namespace {
        opacity: 0.7;
    }
    .entry-content .token.number,
    .entry-content .token.boolean {
        color: #337f00;
    }
    .entry-content .token.property,
    .entry-content .token.tag,
    .entry-content .token.constant,
    .entry-content .token.symbol,
    .entry-content .token.deleted {
        color: #905;
    }
    .entry-content .token.selector,
    .entry-content .token.string,
    .entry-content .token.char,
    .entry-content .token.builtin,
    .entry-content .token.inserted {
        color: #d06d1f;
    }
    .entry-content .token.attr-name {
        color: #d06d1f;
    }
    .entry-content .token.char {
        color: #d06d1f;
    }
    .entry-content .token.operator,
    .entry-content .token.entity,
    .entry-content .token.url,
    .entry-content .language-css .token.string,
    .entry-content .style .token.string {
        color: #920448;
        background: 0;
    }
    .entry-content .token.atrule,
    .entry-content .token.attr-value,
    .entry-content .token.keyword {
        color: #a96498;
    }
    .entry-content .token.function,
    .entry-content .token.class-name {
        color: #a96498;
    }
    .entry-content .token.regex,
    .entry-content .token.important,
    .entry-content .token.variable {
        color: #0e73a2;
    }
    .entry-content .token.important,
    .entry-content .token.bold {
        font-weight: bold;
    }
    .entry-content .token.italic {
        font-style: italic;
    }
    .entry-content .token.entity {
        cursor: help;
    }
    .entry-content * {
        -moz-box-sizing: border-box;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        -webkit-font-smoothing: antialiased;
        text-rendering: optimizeLegibility;
    }
    .entry-content > *:first-child {
        margin-top: 0 !important;
    }
    .entry-content > *:last-child {
        margin-top: 0 !important;
    }
    .entry-content p,
    .entry-content pre,
    .entry-content ul,
    .entry-content ol,
    .entry-content dl,
    .entry-content form,
    .entry-content details,
    .entry-content dl,
    .entry-content blockquote,
    .entry-content table,
    .entry-content xmp,
    .entry-content plaintext,
    .entry-content listing,
    .entry-content figure,
    .entry-content pre[class*='language-'] {
        margin: 0.75em 0 0.45em;
    }
    .entry-content hr {
        margin: 0.75em auto;
    }
    .entry-content ul ul,
    .entry-content ul ol,
    .entry-content ol ul,
    .entry-content ol ol {
        margin-bottom: 0;
    }
    .entry-content h1,
    .entry-content h2,
    .entry-content h3,
    .entry-content h4,
    .entry-content h5,
    .entry-content h6 {
        margin-top: 1.5em;
        margin-bottom: 0.75em;
        margin-left: 0;
        margin-right: 0;
        font-family: AvenirNext-Medium;
        font-weight: 500;
        line-height: 1.5em;
        color: #2b6451;
    }
    .entry-content h1 {
        font-size: 1.5em;
    }
    .entry-content h2 {
        font-size: 1.3em;
    }
    .entry-content h3 {
        font-size: 1.1em;
    }
    .entry-content h4 {
        font-size: 1em;
    }
    .entry-content h5 {
        font-size: 1em;
    }
    .entry-content h6 {
        font-size: 1em;
    }
    .entry-content hr {
        height: 1px;
        border: 0;
        background-color: #dddbd6;
        border-style: inset;
        border-width: 1px;
    }
    .entry-content p {
        margin-left: 0;
        margin-right: 0;
    }
    .entry-content pre,
    .entry-content pre[class*='language-'] {
        padding: 0;
        border: 0;
    }
    .entry-content blockquote {
        display: block;
        padding-left: 0.8em;
        border-left: 0.2em solid #95afa3;
    }
    .entry-content blockquote > :first-child {
        margin-top: 0;
    }
    .entry-content blockquote > :last-child {
        margin-bottom: 0;
    }
    .entry-content li {
        word-wrap: break-all;
    }
    .entry-content ul,
    .entry-content ol {
        list-style: none;
    }
    .entry-content ul {
        margin-left: 1.3em;
        padding: 0;
    }
    .entry-content ol {
        margin-left: 1.3em;
        padding: 0;
        counter-reset: ol_counter;
    }
    .entry-content ul > li {
        position: relative;
    }
    .entry-content ol > li {
        position: relative;
    }
    .entry-content ol > li:before {
        content: counter(ol_counter) '.';
        counter-increment: ol_counter;
        color: #95afa3;
        text-align: right;
        min-width: 1em;
        position: absolute;
        left: -1.5em;
    }
    .entry-content li + li {
        margin-top: 0.25em;
    }
    .entry-content ul ul,
    .entry-content ol ul,
    .entry-content ul ol,
    .entry-content ol ol,
    .entry-content li ul,
    .entry-content li ol {
        margin-top: 0.25em;
        margin-left: 2em;
    }
    .entry-content .task-list-item {
        list-style-type: none;
        text-indent: -1.5em;
    }
    .entry-content .task-list-item:before {
        content: '';
        display: static;
        margin-right: 0;
    }
    .entry-content .task-list-item > input[type='checkbox'] {
        text-indent: -1.7em;
    }
    .entry-content img {
        max-width: 100%;
        height: auto;
    }
    .entry-content u {
        text-decoration: none;
        background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 50%, #95afa3 50%);
        background-repeat: repeat-x;
        background-size: 2px 2px;
        background-position: 0 1em;
    }
    .entry-content a {
        color: #215f4f;
        text-decoration: none;
    }
    .entry-content a:hover,
    .entry-content a:focus,
    .entry-content a:active {
        text-decoration: underline;
    }
    .entry-content a img {
        border: 0;
    }
    .entry-content b,
    .entry-content strong {
        font-weight: bold;
    }
    .entry-content i,
    .entry-content cite,
    .entry-content em,
    .entry-content var,
    .entry-content address,
    .entry-content dfn {
        font-style: italic;
    }
    .entry-content del,
    .entry-content s {
        color: #7e968f;
    }
    .entry-content pre,
    .entry-content xmp,
    .entry-content plaintext,
    .entry-content listing,
    .entry-content code,
    .entry-content kbd,
    .entry-content tt,
    .entry-content samp {
        font-family: Menlo-Regular, Menlo, Monaco, Consolas, 'Courier New', monospace;
    }
    .entry-content code {
        display: inline;
        border: solid 1px #dddbd6;
        padding: 0.2em 0.5em;
        font-size: 0.9em;
        color: #595852;
        background-color: #fefef8;
    }
    .entry-content pre > code {
        display: block;
        border: solid 1px #dddbd6;
        padding: 0.7em 1em;
        font-size: 0.9em;
        overflow-x: auto;
    }
    .entry-content mark {
        color: inherit;
        display: inline;
        padding: 0.2em 0.5em;
        background-color: #f9dcaf;
    }
    .entry-content figcaption {
        text-align: center;
    }
    .entry-content table {
        color: #595852;
        border-collapse: collapse;
        background-color: #fefef8;
        border-spacing: 2px;
        font-size: 1em;
        border: 1px;
        border-spacing: 0;
    }
    .entry-content th,
    .entry-content td {
        padding: 0.7em 1em;
        font-size: 0.9em;
        border: 1px solid #dddbd6;
    }
    .entry-content caption,
    .entry-content th,
    .entry-content td {
        text-align: left;
        font-weight: normal;
        vertical-align: middle;
    }
    .entry-content div[id^='mweb-chart-ele'] svg {
        background-color: white;
    }
    .entry-content .footnotes > ol li {
        text-indent: 0;
    }
    .entry-content .footnotes > ol li::before {
        float: left;
    }
  </style>
  <script>LS.html2ls("stc_blog_css","stc_blog_css");LS.updateVersion("v", "z", "(");</script>
  {% endif %}
  {% if localStorage === true %}
  <script>LS.ls2html("stc_blog_css","style","v")</script>
  {% endif %}
</head>
<body>
  <nav id="sidebar" class="behavior_1">
    <div class="wrap">
      <div class="profile">
        <a href="/">
        </a>
        <span>{{options.title}}</span>
        <p class="subtitle">{{options.subtitle}}</p>
      </div>
      <ul class="buttons">
        {% for nav in navigation %}
        <li>
          <a class="" href="{{nav.url}}" title="{{nav.label}}">
            <span>{{nav.label}}</span>
          </a>
        </li>
        {% endfor %}
      </ul>
      <ul class="buttons">
        <li>
          {% if options.github_url %}
          <a class="inline" rel="nofollow" target="_blank" href="{{options.github_url}}">
            <i class="iconfont icon-github-v" title="GitHub"></i>
          </a>
          {% endif %}
          {% if options.twitter_url %}
          {% if options.twitter_url.indexOf('twitter.com') > -1 %}
          <a class="inline" rel="nofollow" target="_blank" href="{{options.twitter_url}}">
            <i class="iconfont icon-twitter-v" title="Twitter"></i>
          </a>
          {% endif %}
          {% if options.twitter_url.indexOf('weibo.com') > -1 %}
          <a class="inline" rel="nofollow" target="_blank" href="{{options.twitter_url}}">
            <i class="iconfont icon-weibo" title="weibo"></i>
          </a>
          {% endif %}
          {% endif %}
          <a class="inline" href="/rss.html">
            <i class="iconfont icon-rss-v" title="RSS"></i>
          </a>
          <a class="inline" href="/search.html">
            <i class="iconfont icon-search" title="Search"></i>
          </a>
        </li>
      </ul>
    </div>
  </nav>
  <div id="header">
    <div class="btn-bar"><i></i></div>
    <h1><a href="/">{{options.title}}</a></h1>
    <a class="me" href="/about/"><img></a>
  </div>
  <div id="sidebar-mask"></div>
  <div id="main">
    {% block content %}

    {% endblock %}
    <footer id="footer" class="inner">
      &copy; {{ currentYear }}&nbsp;-&nbsp; {{options.title}}
      {% if options.miitbeian or options.mpsbeian %}
      {% if options.miitbeian %}
      &nbsp;-&nbsp;<a target="_blank" rel="nofollow" class="external beian"
        href="http://beian.miit.gov.cn">{{options.miitbeian}}</a>
      {% endif %}
      {% if options.mpsbeian %}
      &nbsp;-&nbsp;<a target="_blank" rel="nofollow" class="external beian"
        href="http://www.beian.gov.cn/">{{options.mpsbeian}}</a>
      {% endif %}
      {%else%}
      &nbsp;-&nbsp;<a href="/">{{ctx.hostname}}</a>
      {% endif %}
      <br />
      Powered by&nbsp;<a target="_blank" href="https://thinkjs.org">ThinkJS</a>&nbsp;&amp;&nbsp;<a target="_blank"
        rel="nofollow" class="external" href="https://firekylin.lithub.cc">FireKylin {{VERSION}}</a>
    </footer>
  </div>
  {% if localStorage === false %}
  <script id="stc_blog_js">
    (function(c,r){var l=function(s){return r.getElementById(s)};var i=function(y){y=y||document;var v=y.defaultView||y.parentWindow,t=y.compatMode,x=y.documentElement,s=v.innerHeight||0,A=v.innerWidth||0,B=v.pageXOffset||0,z=v.pageYOffset||0,C=x.scrollWidth,u=x.scrollHeight;if(t!=="CSS1Compat"){x=y.body;C=x.scrollWidth;u=x.scrollHeight}if(t){A=x.clientWidth;s=x.clientHeight}C=Math.max(C,A);u=Math.max(u,s);B=Math.max(B,y.documentElement.scrollLeft,y.body.scrollLeft);z=Math.max(z,y.documentElement.scrollTop,y.body.scrollTop);return{width:A,height:s,scrollWidth:C,scrollHeight:u,scrollX:B,scrollY:z}};var m=function(u){var x=u.ownerDocument,s=i(x),y=s.scrollX,w=s.scrollY,t=u.getBoundingClientRect(),v=[t.left,t.top];if(w||y){v[0]+=y;v[1]+=w}return v};var g=function(v){var z=m(v);var s=z[0];var A=z[1];var t=v.offsetWidth;var u=v.offsetHeight;return{width:t,height:u,left:s,top:A,bottom:A+u,right:s+t}};var d=function(){var t=l("comments");if(!t){return}var s=function(){var v=t.getAttribute("data-type");if(v==="disqus"){h()}else{if(v==="hypercomments"){p()}else{if(v==="changyan"){b()}else{if(v==="gitalk"){e()}else{if(v==="waline"){k()}else{if(v==="valine"){f()}}}}}}};if(location.hash.indexOf("#comments")>-1){s()}else{var u=setInterval(function(){var w=i();var x=w.scrollY+w.height;var v=g(t).top;if(Math.abs(v-x)<1000){s();clearInterval(u)}},300)}};var h=function(){var u=l("disqus_thread");if(!u){return}c.disqus_config=function(){this.page.url=u.getAttribute("data-url");this.page.identifier=u.getAttribute("data-identifier")};var t=r.createElement("script");t.src="//"+u.getAttribute("data-name")+".disqus.com/embed.js";t.setAttribute("data-timestamp",+new Date());(r.head||r.body).appendChild(t)};var p=function(){var s=l("hypercomments_widget");var t=s.getAttribute("data-name");c._hcwp=c._hcwp||[];c._hcwp.push({widget:"Stream",widget_id:t});(function(){if("HC_LOAD_INIT" in c){return}var w=(navigator.language||navigator.systemLanguage||navigator.userLanguage||"en").substr(0,2).toLowerCase();var u=document.createElement("script");u.type="text/javascript";u.async=true;u.src=("https:"===document.location.protocol?"https":"http")+"://w.hypercomments.com/widget/hc/"+t+"/"+w+"/widget.js";var v=document.getElementsByTagName("script")[0];v.parentNode.insertBefore(u,v.nextSibling)})()};var b=function(){var x=l("SOHUCS");if(!x){return}var w=x.getAttribute("data-name");var t=x.getAttribute("sid");var v=c.innerWidth||r.documentElement.clientWidth;var u=r.createElement("script");if(v<960){u.id="changyan_mobile_js";u.src="//changyan.sohu.com/upload/mobile/wap-js/changyan_mobile.js?client_id="+w+"&conf="+t}else{u.src="//changyan.sohu.com/upload/changyan.js";u.onload=function(){c.changyan.api.config({appid:w,conf:t})}}(r.head||r.body).appendChild(u)};var e=function(){var x=l("gitalk-container");if(!x){return}var w=x.getAttribute("data-name");var v=x.getAttribute("data-identifier");if(w){w=JSON.parse(w)}w.id=v;var u=r.createElement("link");u.setAttribute("rel","stylesheet");u.setAttribute("type","text/css");u.setAttribute("href","//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.css");(r.head||r.body).appendChild(u);var t=r.createElement("script");t.src="//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js";t.onload=function(){var s=new Gitalk(w);s.render("gitalk-container")};(r.head||r.body).appendChild(t)};var k=function(){var v=l("waline-container");var u=v.getAttribute("data-name");if(u){u=JSON.parse(u)}u.el="#waline-container";u.path=location.pathname;var t=document.createElement("script");t.src="//cdn.jsdelivr.net/npm/@waline/client/dist/Waline.min.js";t.onload=function(){new Waline(u)};(r.head||r.body).appendChild(t)};var f=function(){var t=l("valine-container");var u=t.getAttribute("data-name");if(u){u=JSON.parse(u)}u.el="#valine-container";u.path=location.pathname;var v=document.createElement("script");v.src="//cdn.jsdelivr.net/npm/valine/dist/Valine.min.js";v.onload=function(){new Valine(u)};(r.head||r.body).appendChild(v)};c.addEventListener("load",function(){d()});var o={isMob:(function(){var u=navigator.userAgent.toLowerCase();var v=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"];var s=false;for(var t=0;t<v.length;t++){if(u.indexOf(v[t].toLowerCase())>-1){s=true}}return s})()};if(o.isMob){r.documentElement.className+=" mob"}else{r.documentElement.className+=" pc"}var a={$sidebar:r.querySelector("#sidebar"),$main:r.querySelector("#main"),$sidebar_mask:r.querySelector("#sidebar-mask"),$body:r.body,$btn_side:r.querySelector("#header .btn-bar"),$article:r.querySelectorAll(".mob #page-index article")};a.bindEvent=function(){var v=this,t="side",s="click",u="click";if(o.isMob){s="touchstart";u="touchend"}this.$btn_side.addEventListener(u,function(){if(v.$body.className.indexOf(t)>-1){v.$body.className=v.$body.className.replace(t,"");v.$sidebar_mask.style.display="none"}else{v.$body.className+=(" "+t);v.$sidebar_mask.style.display="block"}},false);this.$sidebar_mask.addEventListener(s,function(w){v.$body.className=v.$body.className.replace(t,"");v.$sidebar_mask.style.display="none";w.preventDefault()},false);c.addEventListener("resize",function(){v.$body.className=v.$body.className.replace(t,"");v.$sidebar_mask.style.display="none"},false)};a.bindEvent();c.addEventListener("load",q);c.addEventListener("scroll",q);c.addEventListener("resize",q);function q(){var s=r.getElementsByClassName("lazy-load");if(s.length===0){c.removeEventListener("load",q);c.removeEventListener("scroll",q);c.removeEventListener("resize",q)}else{for(var u=s.length-1;u>-1;u--){var t=s[u];if(j(t,300)){t.src=t.getAttribute("data-src");t.removeAttribute("data-src");t.classList.remove("lazy-load")}}}}function j(t,s){return t.offsetTop-((r.scrollingElement||r.documentElement).scrollTop+(c.innerHeight||r.documentElement.clientHeight))<s}var n={$code:r.querySelectorAll("pre code"),hasClass:function(t,s){return t.className.match(new RegExp("(\\s|^)"+s+"(\\s|$)"))},addClass:function(t,s){if(!n.hasClass(t,s)){t.className+=" "+s}},removeClass:function(t,s){if(n.hasClass(t,s)){t.className=t.className.replace(new RegExp("(\\s|^)"+s+"(\\s|$)")," ")}}};n.stringHash=function(s){var t="";if(s.index>1){t+=s.index+"-"}t+="L"+s.start;if(s.end&&s.end>s.start){t+="-L"+s.end}return t};n.parseHash=function(){var s=location.hash.substr(1).match(/((\d+)-)?L(\d+)(-L(\d+))?/);if(!s){return null}return{index:parseInt(s[2],10)||1,start:parseInt(s[3],10)||1,end:parseInt(s[5],10)||parseInt(s[3],10)||1}};n.mark=function(t){var u=n.parseHash();if(!u||!n.$code||!n.$code[u.index-1]){return}var v=n.$code[u.index-1].querySelectorAll("li");for(var s=u.start-1;s<u.end;s++){if(v[s]){n.addClass(v[s],"mark")}}if(t&&v&&v[0]){setTimeout(function(){window.scrollTo(0,g(v[0]).top-50)})}};n.removeMark=function(){[].slice.call(r.querySelectorAll("pre code li.mark")).forEach(function(s){n.removeClass(s,"mark")})};n.init=function(){[].slice.call(n.$code).forEach(function(v,u){var s=v.innerHTML.trim().split(/[\r\n]+/);var t=s.map(function(x,w){return'<li><span class="line-num" data-line="'+(w+1)+'"></span>'+x+"</li>"}).join("");t="<ul>"+t+"</ul>";if(s.length>3&&v.className.match(/lang-(\w+)/)&&RegExp.$1!=="undefined"){t+='<b class="name">'+RegExp.$1+"</b>"}v.innerHTML=t;n.addClass(v,"firekylin-code");v.addEventListener("click",function(w){if(!w.target||!n.hasClass(w.target,"line-num")){return}if(w.shiftKey){var x=n.parseHash();x.newIndex=u+1;x.current=w.target.getAttribute("data-line");if(x.index!==x.newIndex-0){x.index=x.newIndex;x.start=x.current;x.end=0}else{if(x.current>x.start){x.end=x.current}else{x.end=x.start;x.start=x.current}}location.hash=n.stringHash(x)}else{location.hash=n.stringHash({index:u+1,start:w.target.getAttribute("data-line")})}})})};n.init();c.addEventListener("load",function(){n.mark(true)});c.addEventListener("hashchange",function(){n.removeMark();n.mark()})})(window,document);
  </script>
  <script>LS.html2ls("stc_blog_js","stc_blog_js");LS.updateVersion("v", "!", "R");</script>
  {% endif %}
  {% if localStorage === true %}
  <script>LS.ls2html("stc_blog_js","script","v")</script>
  {% endif %}
</body>
</html>
